#include "echo_server.h"
#include <cassert>

namespace example {

EchoServer::EchoServer(int port) 
    : _server(port) 
{
    // 配置服务器参数
    _server.setThreadCount(2);             // 设置2个工作线程
    _server.enableInactiveRelease(10);     // 启用10秒非活跃连接释放

    // 设置回调函数
    _server.setClosedCallback(std::bind(&EchoServer::onClosed, this, std::placeholders::_1));
    _server.setConnectedCallback(std::bind(&EchoServer::onConnected, this, std::placeholders::_1));
    _server.setMessageCallback(std::bind(&EchoServer::onMessage, this, std::placeholders::_1, std::placeholders::_2));
}

void EchoServer::start() 
{
    _server.start();
}

void EchoServer::onConnected(const PtrConnection& conn) 
{
    LOG_INFO("NEW CONNECTION:%p", conn.get());
}

void EchoServer::onClosed(const PtrConnection& conn) 
{
    LOG_INFO("CLOSE CONNECTION:%p", conn.get());
}

void EchoServer::onMessage(const PtrConnection& conn, Buffer* buf) 
{
    // 获取可读数据长度
    size_t readable = buf->readAbleSize();
    if (readable > 0) 
    {
        // 直接回显数据给客户端
        conn->send(buf->readPosition(), readable);
        
        // 移动读指针（标记数据已处理）
        buf->moveReadOffset(readable);
        
        // 发送完成后关闭连接（半关闭状态，等待数据发送完毕）
        conn->shutdown();
    }
}

} // namespace example